#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n;
bool h,l;
bool flg;
void bfs(int x,int y,vector<vector<int>>& arr,vector<vector<int>>& vis)
{
	vis[x][y]=1;
	queue<pair<int,int>> q;
	q.push({x,y});
	while(q.size())
	{
		int tx=q.front().first,ty=q.front().second;
		q.pop();
		for(int i=tx-1;i<=tx+1;i++)
		{
			for(int j=ty-1;j<=ty+1;j++)
			{
				if(i<0 || i>=n || j<0 || j>=n )
					continue;
				if(i==tx && j==ty)
					continue;
				if(arr[i][j]!=arr[tx][ty])
				{
					if(arr[i][j]>arr[tx][ty])
						h=true;
					else if(arr[i][j]<arr[tx][ty])
						l=true;
				}
				else if(!vis[i][j]){
					q.push({i,j});
					vis[i][j]=1;
				}
			}
		}	
	}
}
int main()
{
	
	cin>>n;
	vector<vector<int>> arr(n+1,vector<int>(n+1));
	vector<vector<int>> vis(n+1,vector<int>(n+1));
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			cin>>arr[i][j];
	int peak=0,valley=0;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			h=false,l=false;
			flg=true;
			if(!vis[i][j])
			{
				bfs(i,j,arr,vis);
				if(h && l)
					continue;
				else if(h)
				{
					valley++;
				}
				else if(l)
				{
					peak++;
				}
				else if(!h&& !l)
				{
					peak++;
					valley++;
				}
			}
		}
	}
	
	cout<<peak<<' '<<valley<<endl;
	return 0;
}
